import tkinter as tk
from tkinter import messagebox, ttk
import subprocess
import sys
import os


class NetworkLabelLauncher:
    def __init__(self, root):
        self.root = root
        self.root.title("网络线路标号系统")
        self.root.geometry("500x300")
        self.root.resizable(False, False)
        self.root.configure(bg="#f0f0f0")

        # 设置中文字体支持
        self.setup_fonts()

        # 创建主界面
        self.create_widgets()

        # 居中窗口
        self.center_window()

    def setup_fonts(self):
        """设置支持中文的字体"""
        default_font = ('SimHei', 10)
        self.root.option_add("*Font", default_font)

    def center_window(self):
        """将窗口居中显示"""
        self.root.update_idletasks()
        width = self.root.winfo_width()
        height = self.root.winfo_height()
        x = (self.root.winfo_screenwidth() // 2) - (width // 2)
        y = (self.root.winfo_screenheight() // 2) - (height // 2)
        self.root.geometry('{}x{}+{}+{}'.format(width, height, x, y))

    def create_widgets(self):
        """创建界面组件"""
        # 标题
        title_frame = tk.Frame(self.root, bg="#f0f0f0")
        title_frame.pack(pady=30)

        title_label = tk.Label(
            title_frame,
            text="网络线路标号系统",
            font=('SimHei', 18, 'bold'),
            bg="#f0f0f0",
            fg="#333333"
        )
        title_label.pack()

        # 按钮区域
        button_frame = tk.Frame(self.root, bg="#f0f0f0")
        button_frame.pack(expand=True, fill=tk.BOTH, padx=50)

        # 服务器按钮
        self.server_btn = ttk.Button(
            button_frame,
            text="启动服务器端",
            command=self.launch_server,
            width=20
        )
        self.server_btn.pack(pady=15)

        # 客户端按钮
        self.client_btn = ttk.Button(
            button_frame,
            text="启动客户端",
            command=self.launch_client,
            width=20
        )
        self.client_btn.pack(pady=15)

        # 底部信息
        footer_frame = tk.Frame(self.root, bg="#f0f0f0")
        footer_frame.pack(fill=tk.X, pady=10)

        footer_label = tk.Label(
            footer_frame,
            text="请根据您的权限选择合适的程序启动",
            font=('SimHei', 9),
            bg="#f0f0f0",
            fg="#666666"
        )
        footer_label.pack()

    def check_file_exists(self, filename):
        """检查文件是否存在"""
        if not os.path.exists(filename):
            messagebox.showerror("错误", f"未找到{filename}文件，请确保程序文件完整")
            return False
        return True

    def launch_server(self):
        """启动服务器端程序"""
        # 显示确认提示
        result = messagebox.askyesno(
            "权限确认",
            "如果您不是网络管理员请不要运行服务器端程序\n\n是否确认启动服务器端？"
        )

        if result:
            # 用户确认启动服务器
            if self.check_file_exists("server_gui.py"):
                try:
                    # 启动服务器程序
                    subprocess.Popen([sys.executable, "server_gui.py"])
                    messagebox.showinfo("启动成功", "服务器端程序已启动")
                except Exception as e:
                    messagebox.showerror("启动失败", f"无法启动服务器端程序：{str(e)}")
        else:
            # 用户取消，启动客户端
            self.launch_client()

    def launch_client(self):
        """启动客户端程序"""
        if self.check_file_exists("client_gui.py"):
            try:
                # 启动客户端程序
                subprocess.Popen([sys.executable, "client_gui.py"])
                messagebox.showinfo("启动成功", "客户端程序已启动")
            except Exception as e:
                messagebox.showerror("启动失败", f"无法启动客户端程序：{str(e)}")


if __name__ == "__main__":
    root = tk.Tk()
    app = NetworkLabelLauncher(root)
    root.mainloop()
